package com.ws.genercity.demo07;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 13353
 */
public class Test07 {
    public static void main(String[] args) {
        ArrayList<Animal> animals = new ArrayList<>();
        ArrayList<Cat> cats = new ArrayList<>();
        ArrayList<MiniCat> miniCats = new ArrayList<>();
        //采用的是上限的通配符
        //cats.addAll(miniCats);
        
        //showAnimal(animals);
        showAnimal(cats);
        showAnimal(miniCats);

        showAnimal2(cats);
        showAnimal2(animals);
        //
        //showAnimal2(miniCats);


    }

    /**
     * 泛型通配符。，传递的集合类型，只能是cat或者cat的子类类型
     * @param list
     */
    public static void showAnimal(ArrayList<? extends Cat> list){
        //限制类型元素
        //list.add(new Cat());
        for (Cat cat : list) {
            System.out.println(cat);
        }

    }

    /**
     * 统配类型符的下限，要求集合只能是cat或者cat的付类型
     * @param list
     */
    public static void showAnimal2(List<? super Cat> list) {
        //能填充元素，但是不保证约束类型
        //list.add(new Cat());
        //list.add(new Animal());
        //list.add(new MiniCat());
        for (Object o : list) {
            System.out.println(o);
        }
    }

}